## This file is a quick tutorial on writing CMakeLists for targeting the Vita
cmake_minimum_required(VERSION 3.2)

## This includes the Vita toolchain, must go before project definition
# It is a convenience so you do not have to type
# -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake for cmake. It is
# highly recommended that you include this block for all projects.
if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
  if(DEFINED ENV{VITASDK})
    set(CMAKE_TOOLCHAIN_FILE "$ENV{VITASDK}/share/vita.toolchain.cmake" CACHE PATH "toolchain file")
  else()
    message(FATAL_ERROR "Please define VITASDK to point to your SDK path!")
  endif()
endif()

## Define project parameters here
# Name of the project
project(vmrp C CXX)
# This line adds Vita helper macros, must go after project definition in order
# to build Vita specific artifacts (self/vpk).
include("${VITASDK}/share/vita.cmake" REQUIRED)

## Configuration options for this app
# Display name (under bubble in LiveArea)
set(VITA_APP_NAME "vmrp")
# Unique ID must be exactly 9 characters. Recommended: XXXXYYYYY where X =
# unique string of developer and Y = a unique number for this app
set(VITA_TITLEID  "VMRPLAYER")
set(VITA_VPKNAME "vmrp")
# Optional version string to show in LiveArea's more info screen
set(VITA_VERSION  "00.10")

set(DATA_PATH "ux0:data/VMRP/" CACHE STRING "Path to data (with trailing /)")

add_definitions(-DDATA_PATH="${DATA_PATH}")
add_definitions(-D_DEBUG)
add_definitions(-D_DMRP_OPNAMES)
## Flags and includes for building
# Note that we make sure not to overwrite previous flags
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-q -O3 -g -ffast-math -mfloat-abi=softfp -Wno-deprecated")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=gnu++20 -Wno-write-strings -Wno-psabi")

# Optional. You can specify more param.sfo flags this way.
set(VITA_MKSFOEX_FLAGS "${VITA_MKSFOEX_FLAGS} -d PARENTAL_LEVEL=1")

# Add any additional library paths here
# ${CMAKE_CURRENT_BINARY_DIR} lets you use any library currently being built
link_directories(
  ${CMAKE_CURRENT_BINARY_DIR}
)

file(GLOB SRC "src/*.c")
file(GLOB LUADEC "src/luadec/*.c")
file(GLOB STCLIB "src/src/lib/*.c")
file(GLOB STCLIBUNUSED "src/src/lib/unused/*.c")
file(GLOB STCSRCUNUSED "src/src/unused/*.c")
file(GLOB STCSRC "src/src/*.c")
file(GLOB STCSRCTOMR "src/tomr/*.c")
file(GLOB STCTOMRUNUSED "src/tomr/unused/*.c")
file(GLOB STCUNUSED "src/unused/*.c")


## Build and link
# Add all the files needed to compile here
add_executable(${PROJECT_NAME}
               ${SRC}
               ${LUADEC}
               ${STCLIB}
               #${STCLIBUNUSED}
               #${STCSRCUNUSED}
               ${STCSRC}
               ${STCSRCTOMR}
               ${STCTOMRUNUSED}
               #${STCUNUSED}
)

target_include_directories(${CMAKE_PROJECT_NAME}
                           PUBLIC ${CMAKE_SOURCE_DIR}/src
                           )

                           target_include_directories(${CMAKE_PROJECT_NAME}
                           PUBLIC ${CMAKE_SOURCE_DIR}/src/include
                           )
                           target_include_directories(${CMAKE_PROJECT_NAME}
                           PUBLIC ${CMAKE_SOURCE_DIR}/src/luadec
                           )
                           target_include_directories(${CMAKE_PROJECT_NAME}
                           PUBLIC ${CMAKE_SOURCE_DIR}/src/src/h
                           )
                           target_include_directories(${CMAKE_PROJECT_NAME}
                           PUBLIC ${CMAKE_SOURCE_DIR}/src/tomr
                           )

# Library to link to (drop the -l prefix). This will mostly be stubs.
target_link_libraries(${PROJECT_NAME}
-Wl,--whole-archive pthread -Wl,--no-whole-archive
SDL2_mixer
SDL2_ttf
SDL2_image
SDL2
#smpeg2
freetype
vorbisfile
vorbis
mikmod
ogg
webp
mpg123
FLAC
jpeg
png
z
m
stdc++
vitaGL
vitashark
mathneon
kubridge_stub
SceAppMgr_stub
SceAudio_stub
SceAudioIn_stub
SceCtrl_stub
SceCommonDialog_stub
SceDisplay_stub
SceKernelDmacMgr_stub
SceGxm_stub
SceShaccCg_stub
SceSysmodule_stub
ScePower_stub
SceTouch_stub
SceVshBridge_stub
SceHid_stub
SceMotion_stub
SceAppUtil_stub
SceAvPlayer_stub
SceShaccCgExt
taihen_stub
)



## Create Vita files
vita_create_self(${PROJECT_NAME}.self ${PROJECT_NAME})
# The FILE directive lets you add additional files to the VPK, the syntax is
# FILE src_path dst_path_in_vpk. In this case, we add the LiveArea paths.
vita_create_vpk(${PROJECT_NAME}.vpk ${VITA_TITLEID} ${PROJECT_NAME}.self
  VERSION ${VITA_VERSION}
  NAME ${VITA_APP_NAME}
  FILE sce_sys/icon0.png sce_sys/icon0.png
  FILE sce_sys/livearea/contents/bg.png sce_sys/livearea/contents/bg.png
  FILE sce_sys/livearea/contents/startup.png sce_sys/livearea/contents/startup.png
  FILE sce_sys/livearea/contents/template.xml sce_sys/livearea/contents/template.xml
)
